/**
 * Project Name:UserMapper
 * File Name:UserMapper.java
 * Package Name:com.bwda.dsrs.systemservice.mapper;
 * Date:2019年4月28日
 * Copyright (c) 2019, 江苏保旺达软件有限公司 All Rights Reserved.
 *
 */
package com.bwda.dsrs.systemservice.mapper;

import com.bwda.dsrs.systemservice.domain.form.user.*;
import com.bwda.dsrs.systemservice.domain.po.user.UserPo;
import com.bwda.dsrs.systemservice.domain.condition.user.UserCondition;
import com.bwda.dsrs.systemservice.domain.vo.user.UserLoginVo;
import org.apache.ibatis.annotations.Param;


import java.util.List;

/**
 * 用户菜单管理
 *
 * @author youzhen
 * @date 2019年4月28日
 */
public interface UserMapper extends BaseMapper<UserPo, UserCondition> {

    /**
     * 获得ID号
     * @return
     */
    Integer queryId();

    /**
     * 修改用户状态
     * @param userId
     * @param state
     */
    void updateState(@Param("userId") Integer userId, @Param("state") Long state);

    /**
     * 查询详情
     *
     * @param userCode
     * @return
     */
    UserQueryForm queryDetails(String userCode);

    /**
     * 密码重置
     *@param userId
     *@param password
     */
    void resetPassword(@Param("userId") Integer userId, @Param("password") String password);

    /**
     * 通过用户名查询用户
     *
     * @param userName 用户名
     * @return 用户对象信息
     */
    UserExcelImport selectUserName(String userName);

    /**
     * 新增用户信息
     *
     * @param user 用户信息
     * @return 结果
     */
    int importUser(UserExcelImport user);


    /**
     * 查询用户
     * @param userCode
     * @return
     */
    UserPo  queryUserByUserCodeForAop(String userCode);
    /**
     * 添加用户角色
     *
     * @param userRoleForm
     * @return 结果
     */
    void insertRole(UserRoleForm userRoleForm);

    /**
     * 查询角色普通用户ID
     *
     * @return 结果
     */
    int queryRole();

    /**
     * 删除用户角色
     * @param userCode
     * @return 结果
     */
    int deleteRole(String userCode);

    /**
     * 获得roleID号
     * @return
     */
    int queryRoleId();

    /**
     * 密码更新
     *
     * @param userPo
     */
    void updatePassword(UserPo userPo);

    /**
     * 批量删除
     *
     * @param userIds
     */
    void deleteUser(Integer userIds);

    /**
     * 组织迁移
     *@param orgId
     *@param userIds
     */
    void transferUserOrg(@Param("userIds") Integer userIds,@Param("orgId") Integer orgId);

    /**
     * 获取用户账户信息
     * @param condition
     * @return
     */
    List<UserPo> queryUserList(UserCondition condition);

    /**
     * 批量查询
     * @param userIds
     * @return
     */
    List<UserForm> queryUserByCode(String[] userIds);

    /**
     * 简单查询列表
     * @param userCondition
     * @return
     */
    List<UserPo> selectSimpleList(UserCondition userCondition);

    /**
     * 职级/头衔 记录 绑定/解绑
     * @author liangjy
     * @param userChangeLevelForm
     * isBind true:绑定  false:解绑 字段置空
     * value 值
     * levelType 分级类型  只有两种 RANK:职级  TITLE:头衔
     * userCodeList 用户code集合
     */
    void updateLevelAndTitile(UserChangeLevelForm userChangeLevelForm);
    /**
     * 单表查询
     * @param userForm
     * @return
     */
    List<UserForm> queryUser(UserForm userForm);

    /**
     * 查询组织下的人
     * @param orgId
     * @return
     */
    List<UserForm> queryByOrgIdUser(Integer orgId);
    /**
     * 校验用户登录名userCode
     * @param userCode
     * @return
     */
    int checkUserCode(String userCode);
    /**
     * 根据ID查询用户Code
     * @param userid
     * @return
     */
    String queryCodeById(Integer userid);

    /**
     *查询组织管理员
     * @param userCode
     * @return
     */
    String queryOrgAdminCode(String userCode);

    /**
     * 查询当前用户等级下的用户，包括未分配用户等级的用户
     * @param condition
     * @return
     */
    List<UserPo> queryUserByIncludeLevel(UserCondition condition);

    /**
     * 查询当前用户等级下的用户，包括未分配用户等级的用户数量
     * @param userCondition
     * @return
     */
    int queryUserByIncludeLevelCount(UserCondition userCondition);

    /**
     * 根据用户组id获取用户
     * @param condition
     * @return
     */
    List<UserPo> queryUserByGroupId(UserCondition condition);
    /**
     * 根据组织id获取用户
     * @param condition
     * @return
     */
    List<UserPo> queryUserByOrgId(UserCondition condition);
    /**
     * 根据组织id获取用户
     * @param condition
     * @return
     */
    int queryUserByOrgIdCount(UserCondition condition);
    /**
     * 删除用户详情
     * @param userCode
     * @return
     */
    void deleteInfo(String userCode);
    /**
     * 批量查询组织ID
     * @param ids
     * @return
     */
    List<Integer> queryOrgIds(Integer[] ids);
    /**
     * 校验Phone是否唯一
     *
     * @param phone 用户信息
     * @return
     */
    int checkPhoneUnique(String phone);

    /**
     * 校验Phone是否唯一
     * @param phone
     * @param userCode
     * @return
     */
    int checkPhoneUniqueUpdate(@Param("phone") String phone,@Param("userCode") String userCode);

    /**
     * 校验Idnumber是否唯一
     *
     * @param idnumber 用户信息
     * @return
     */
    int checkIdnumberUnique(String idnumber);

    /**
     *校验Idnumber是否唯一
     * @param idnumber
     * @param userCode
     * @return
     */
    int checkIdnumberUniqueUpdate(@Param("idnumber") String idnumber,@Param("userCode") String userCode);
    /**
     * 校验email是否唯一
     *
     * @param email 用户信息
     * @return
     */
    int checkEmailUnique(String email);

    /**
     *校验email是否唯一
     * @param email
     * @param userCode
     * @return
     */
    int checkEmailUniqueUpdate(@Param("email") String email,@Param("userCode") String userCode);
    /**
     * 查询用户状态
     *
     * @param ids 用户信息
     * @return
     */
    List<Integer> queryUserState(Integer[] ids);
    /**
     * 获取登陆时间
     *
     * @return
     */
    List<UserLoginVo> queryUserLoginTime();
    /**
     * 更改用户状态
     * @param userId
     * @return
     */
    void updateUserState(Integer userId);
    /**
     * 锁定用户密码
     * @param userCode
     * @return
     */
    UserLoginVo checkPwd(String userCode);
    /**
     * 锁定用户时间
     * @param userCode
     * @return
     */
    void updateLockDate(String userCode);

    /**
     *  查询锁定时间
     * @return
     */
    List<UserLoginVo> queryLockTime();

    /**
     * 判断用户是否是特权用户
     * @param userCode
     * @return
     */
    int checkUserIsTq(String userCode);

    /**
     * 查询用户分级下所有用户
     * @param var1
     * @return
     */
    List<UserPo> selectListForLevelScore(UserCondition var1);


    /**
     * 查询角色下所有用户
     * @param roleId
     * @return
     */
    List<UserPo> selectListForRoleId(Integer roleId);
    /**
     * 查询角色下所有用户
     * @param userForm
     * @return int
     */
    int queryUserFormCount(FileSpaceSettingQueryForm userForm);
    /**
     * 查询角色下所有用户
     * @param userForm
     * @return List
     */
    List<UserPo> queryUserForm(FileSpaceSettingQueryForm userForm);
}